//
//  WBBasController.swift
//  CustomWeiBo
//
//  Created by laiqiang on 21/5/9.
//  Copyright © 2021年 laiqiang. All rights reserved.
//

import UIKit

class WBBasController: UIViewController {

    //登录标记 --
    var userLogon = true
    
    var visitorInfo:[String:String]?
    
    //表格视图，没有登陆不创建,所以是可选的
    var tableView:UITableView?
    //刷新控件
    var refreshController:LQRefreshControl?
    
    var isPullup = false
    
    /// 自定义导航条
    lazy var navgationbar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 64))
    //导航条目
    lazy var navItem = UINavigationItem()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        setupUI()
        
        //FIXME:
        WBNetworkingManager.share.userLogin ? loaddata() : ()
        
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(loginSuccess),
            name: NSNotification.Name(rawValue: WBUserLoginSuccessNotification),
            object: nil)
    }
    
    //基类中，添加加载数据方法，子类实现加载方法
    func loaddata(){
        
        refreshController?.endRefreshing()//子类不实现，基类就关闭刷新控件
    }
       
//    override var title: String?{
//        
//    }
    
    deinit {
        NotificationCenter.default.removeObserver(self)
    }
    
}

//访客视图的监听
extension WBBasController {
    
    //@objc 否则NotificationCenter 调用不到
    @objc fileprivate func loginSuccess(){
    
        print("登录成功~~~~")
        navItem.leftBarButtonItem = nil
        navItem.rightBarButtonItem = nil
        navItem.titleView = nil
        view = nil//自动 加载页面 loadview
        NotificationCenter.default.removeObserver(self)//重要，防止重复注册监听
    }

    @objc fileprivate func login(){
        print("login~~~~")
        
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: WBUserShouldLoginNotification), object: nil)
    }
    
    @objc fileprivate func register(){
        print("register~~~~")
    }
}

//mark:页面设置
extension WBBasController{
    fileprivate func setupUI(){//外界不能用了，
        
        view.backgroundColor = UIColor.white

        //没取消自动缩进:因为(自定义时)隐藏导航栏，导致向上缩进44px (导航栏高度)
        automaticallyAdjustsScrollViewInsets = false
        //所以设置取消自动缩进后，还会向上缩进20px
        //要设置insert 顶部间距(导航栏＋状态栏＝64)，才能正常
        
        setupNavgationbar()

        WBNetworkingManager.share.userLogin ? setupTableView() : setVisitoryView()
    }
    
    //登入之后才会显示--子类重写这个方法
    func setupTableView() {
        
        tableView = UITableView(frame: view.frame, style: .plain)
//        view.addSubview(tableView!)//会被遮挡，调换navbar创建顺序可以。但是不好
        
        //使用insert制定插入位置，在navgationbar之下
        view.insertSubview(tableView!, belowSubview: navgationbar)
        
        //设置数据源,导入协议
        
        tableView?.delegate = self
        tableView?.dataSource = self
        
        //要设置insert 顶部间距(导航栏＋状态栏＝64)，才能正常
        tableView?.contentInset = UIEdgeInsets(top: navgationbar.bounds.height, left: 0, bottom:tabBarController?.tabBar.bounds.height ?? 49, right: 0)
        //指示器的缩进
        tableView?.scrollIndicatorInsets = tableView!.contentInset
        
        
        //设置刷新控件
        refreshController = LQRefreshControl()
        tableView?.addSubview(refreshController!)
        refreshController?.addTarget(self, action: #selector(loaddata), for: .valueChanged)
        
        loaddata()
        
    }
    
    //访客视图
    private func setVisitoryView(){
        
        let visitoryView = WBVisitorView(frame: view.bounds)
        view.insertSubview(visitoryView, belowSubview: navgationbar)
        
        visitoryView.visitorinfo = visitorInfo
        
        visitoryView.loginbtn.addTarget(self, action: #selector(login), for: .touchUpInside)
        visitoryView.registerbtn.addTarget(self, action: #selector(register), for: .touchUpInside)
    
        navItem.leftBarButtonItem = UIBarButtonItem.init(title: "注册", targe: self, action: #selector(login))
        navItem.rightBarButtonItem = UIBarButtonItem.init(title: "登录", targe: self, action: #selector(register))
    }
    
    func setupNavgationbar() {
        
        view.addSubview(navgationbar)
        
        navItem.title = title
        navgationbar.items = [navItem]
        
        navgationbar.barTintColor = UIColor.colorWithaHex(hexStr: "0xf6f6f6")
        
        //导航标题颜色
        navgationbar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.darkGray]
        
    }
}

//mark:tableview的协议
extension WBBasController:UITableViewDataSource,UITableViewDelegate {

    //不写代理会报错
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 0;
    }
    
    //最后一行时，上拉刷新
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        
        //1.判断最后一行(最大的section，最大的row)
        //row
        let row = indexPath.row
        //section
        let section = tableView.numberOfSections - 1
        
        print("section:--\(section)")
        print("最后一行row:--\(row)")
        
        if row < 0 || section < 0 {
            return
        }
        
        //最后一行数据，没有在刷新
        let count = tableView.numberOfRows(inSection: section)
        if row == (count - 1) && !isPullup {

            isPullup = true
            loaddata()
        }
    }

}


















